package com.zhaohang.cn.utils;

import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Environment;
import android.provider.Settings;


import com.zhaohang.cn.mybasicactivity.CompontApplayCation;

import java.util.Date;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * Created by 赵航 on 2018/1/16.
 */

public class Util {
    //这个是在主线程去更新ui,在没有上下文的环境,
    public static void runOnUIThread(Runnable runnable) {
        CompontApplayCation.mainHandler.post(runnable);
    }
    //得到字符串数组信息
    public static String[] getStringArray(int resId) {
        return getResources().getStringArray(resId);
    }
    //得到资源管理的类
    public static Resources getResources() {
        return CompontApplayCation.context.getResources();
    }
    //在屏幕适配时候使用,让代码中使用dip属性
    public static int getDimens(int resId) {
        return getResources().getDimensionPixelSize(resId);
    }

    /***
     * 去权限设置界面
     */
    public static void goToSetting() {
        //go to setting view
        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        //        Uri uri = Uri.fromParts("package", context.getPackageName());
        //        intent.setData(uri);
        intent.setData(Uri.parse("package:" + CompontApplayCation.context.getPackageName()));
        CompontApplayCation.context.startActivity(intent);
    }

    /**
     * @return 检查SD卡是否存在，也就是内存卡是否存在
     */
    public static boolean sdIsOk() {

        String state = Environment.getExternalStorageState();
        boolean equals = Environment.MEDIA_MOUNTED.equals(state);
        if (!equals) {
            ToastMake.showToast("请确认已经插入SD卡");
        }

        return equals;
    }

    /**
     * 1，不能全部是数字
     * 2，不能全部是字母
     * 3，必须是数字或字母
     * 只要能同时满足上面3个要求就可以了，
     *
     * @param
     * @return
     */
    public static boolean isPassWorld(String str) {
        boolean isDigit = false;//定义一个boolean值，用来表示是否包含数字
        boolean isLetter = false;//定义一个boolean值，用来表示是否包含字母
        for (int i = 0; i < str.length(); i++) {
            //用char包装类中的判断数字的方法判断每一个字符
            if (Character.isDigit(str.charAt(i))) {
                isDigit = true;

            }
            //用char包装类中的判断字母的方法判断每一个字符
            if (Character.isLetter(str.charAt(i))) {
                isLetter = true;
            }
        }
        String regex = "^[a-zA-Z0-9]+$";
        boolean isRight = isDigit && isLetter && str.matches(regex);
        if (!isRight) {
//            ToastMake.showToast(getResources().getString(R.string.string62));
            return false;
        }
        return isRight;
    }

    /**
     * 验证手机号码
     * <p>
     * 移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
     * 联通号码段:130、131、132、136、185、186、145
     * 电信号码段:133、153、180、189
     *
     * @param mobiles
     * @return
     */

    public static boolean isMobileNO(String mobiles) {
        Pattern p = Pattern
                .compile("^[1][3,4,5,7,8][0-9]{9}$");
        Matcher m = p.matcher(mobiles);
        boolean matches = m.matches();
        if (!matches) {
            ToastMake.showToast("电话号码输入有误");
            return false;
        }
        return true;
    }

    /**
     * @param context
     * @return 检验是否联网，true是联网状态
     */
    public static boolean netConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    }

    /**
     * @param str
     * @return 检验是否为车牌号，区分大小写
     */
    public static boolean isCar(String str) {
        Pattern p = null;
        Matcher m = null;
        boolean b = false;
        p = Pattern
                .compile("^[京,津,渝,沪,冀,晋,辽,吉,黑,苏,浙,皖,闽,赣,鲁,豫,鄂,湘,粤,琼,川,贵,云,陕,秦,甘,陇,青,台,内蒙古,桂,宁,新,藏,澳,军,海,航,警][A-Z][0-9,A-Z]{5}$"); // 验证车牌号
        m = p.matcher(str);
        b = m.matches();
        return b;
    }

    /**
     * 任意的6-25位密码
     */
    public static boolean everyPaw(String str) {

        if (str.length() < 6 || str.length() > 25) {

            ToastMake.showToast("密码长度有误,6-25位密码长度");
            return false;
        }

        return true;
    }

    /**
     * 身份证正则表达式
     */
    public static boolean isIdNumber(String str) {

        if (str.length() == 18) {
            Pattern p = Pattern
                    .compile("^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$");
            Matcher m = p.matcher(str);
            boolean matches = m.matches();
            if (!matches){
                ToastMake.showToast("身份证号码输入不正确");
                return false;
            }

        }else if (str.length() == 15) {
            Pattern p2 = Pattern
                    .compile("^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$");
            Matcher m2 = p2.matcher(str);
            boolean matches2 = m2.matches();
            if (!matches2){
                ToastMake.showToast("身份证号码输入不正确");
                return false;
            }
        }else {
//            ToastMake.showToast(getResources().getString(R.string.string76));
            return false;
        }


        return true;
    }


    /**
     * 获取当前时间
     */
    public static long getCurDate(){
        Date curDate =  new Date(System.currentTimeMillis());
        return curDate.getTime();
    }
    // date要转换的date类型的时间
    public static long dateToLong(Date date) {
        return date.getTime();
    }


    public static boolean isPhoneNO(String mobiles) {
        Pattern p = Pattern
                .compile("^[1][3,4,5,7,8][0-9]{9}$");
        Matcher m = p.matcher(mobiles);
        boolean matches = m.matches();
        if (!matches) {

            return false;
        }
        return true;
    }

    /**
     * 去掉String字符串中的.
     * @param str
     * @return
     */
    public static String GetDeleteShort(String str){
        String s = str.replace(".", "");
        return s;
    }

    /**
     *
     * @param map
     * @return  将map转化为xml
     */
    public static String map2XmlString(Map<String, String> map) {
        String xmlResult = "";

        StringBuffer sb = new StringBuffer();
        sb.append("<xml>");
        for (String key : map.keySet()) {

            String value =map.get(key);

            sb.append("<" + key + ">" + value + "</" + key + ">");

        }
        sb.append("</xml>");
        xmlResult = sb.toString();

        return xmlResult;
    }
}
